#pragma once

#include <memory>
#include <string>
#include <vector>

#include <ros/builtin_message_traits.h>
#include <ros/message_operations.h>
#include <ros/serialization.h>
#include <ros/types.h>
#include <std_msgs/Header.h>
#include <actionlib_msgs/GoalStatus.h>

#include "ActDemoFeedback.h"

namespace ros1_protobuf_msg_bridge {
    typedef boost::shared_ptr<ros1_protobuf_msg_bridge::ActDemoFeedback> ActDemoFeedbackPtr;
    typedef boost::shared_ptr<ros1_protobuf_msg_bridge::ActDemoFeedback const> ActDemoFeedbackConstPtr;

    template <class ContainerAllocator>
    struct ActDemoActionFeedback_ {
        typedef ActDemoActionFeedback_<ContainerAllocator> Type;

        ActDemoActionFeedback_() : header(), status(), feedback() {
        }
        ActDemoActionFeedback_(const ContainerAllocator &_alloc) : header(_alloc), status(_alloc), feedback(_alloc) {
            (void)_alloc;
        }

        typedef ::std_msgs::Header_<ContainerAllocator> _header_type;
        _header_type header;

        typedef ::actionlib_msgs::GoalStatus_<ContainerAllocator> _status_type;
        _status_type status;

        typedef ros1_protobuf_msg_bridge::ActDemoFeedback _feedback_type;
        _feedback_type feedback;

        typedef boost::shared_ptr<::ros1_protobuf_msg_bridge::ActDemoActionFeedback_<ContainerAllocator>> Ptr;
        typedef boost::shared_ptr<::ros1_protobuf_msg_bridge::ActDemoActionFeedback_<ContainerAllocator> const> ConstPtr;

    }; // struct ActDemoActionFeedback_

    typedef ::ros1_protobuf_msg_bridge::ActDemoActionFeedback_<std::allocator<void>> ActDemoActionFeedback;

    typedef boost::shared_ptr<::ros1_protobuf_msg_bridge::ActDemoActionFeedback> ActDemoActionFeedbackPtr;
    typedef boost::shared_ptr<::ros1_protobuf_msg_bridge::ActDemoActionFeedback const> ActDemoActionFeedbackConstPtr;
} // namespace ros1_protobuf_msg_bridge

namespace ros { namespace message_traits {
    template <class ContainerAllocator>
    struct MD5Sum<::ros1_protobuf_msg_bridge::ActDemoActionFeedback_<ContainerAllocator>> {
        static const char *value() {
            return "0be2dd905b5d8e871f295dd5bff0e0b3";
        }

        static const char *value(const ::ros1_protobuf_msg_bridge::ActDemoActionFeedback_<ContainerAllocator> &) {
            return value();
        }
    };

    template <class ContainerAllocator>
    struct DataType<::ros1_protobuf_msg_bridge::ActDemoActionFeedback_<ContainerAllocator>> {
        static const char *value() {
            return "ros1_protobuf_msg_bridge/ActDemoActionFeedback";
        }

        static const char *value(const ::ros1_protobuf_msg_bridge::ActDemoActionFeedback_<ContainerAllocator> &) {
            return value();
        }
    };

    template <class ContainerAllocator>
    struct Definition<::ros1_protobuf_msg_bridge::ActDemoActionFeedback_<ContainerAllocator>> {
        static const char *value() {
            return "ros1_protobuf_msg_bridge/ActDemoActionFeedback";
        }

        static const char *value(const ::ros1_protobuf_msg_bridge::ActDemoActionFeedback_<ContainerAllocator> &) {
            return value();
        }
    };
}} // namespace ros::message_traits

namespace ros { namespace serialization {
    template <class ContainerAllocator>
    struct Serializer<::ros1_protobuf_msg_bridge::ActDemoActionFeedback_<ContainerAllocator>> {
        template <typename Stream, typename T>
        inline static void allInOne(Stream &stream, T m) {
            stream.next(m.header);
            stream.next(m.status);
            stream.next(m.feedback);
        }

        ROS_DECLARE_ALLINONE_SERIALIZER
    }; // struct ActDemoActionFeedback_
}} // namespace ros::serialization
